Skip to content

Fix PIV connection leak#48414

Merged
Joerger merged 1 commit intomasterfrom
joerger/fix-yubikey-connection-leak
Nov 6, 2024
Merged

Fix PIV connection leak#48414
Joerger merged 1 commit intomasterfrom
joerger/fix-yubikey-connection-leak

Conversation

@Joerger
Copy link
Copy Markdown
Contributor

@Joerger Joerger commented Nov 5, 2024

The changes in #47091 introduced a delayed closure of the PIV connection to reduce the likelihood of closing a connection that's going to be opened moments later. However, this delayed closure is not bounded by the program execution, so if the delay goes past the end of program execution it would not be closed. This causes the PIV connection to go into a zombie state where the PIN remains cached indefinitely, until the yubikey is unplugged or another program claims and closes the zombie connection.

This PR removes the delayed closure as it isn't strictly necessary to fix #46372 and was meant as a small performance improvement. If we need this performance gain, we should look into different ways to handle the PIV connection other than a package level global. Probably, we would need to open and close the YubiKey connection in/near main().

@aws-amplify-us-west-2
Copy link
Copy Markdown

This pull request is automatically being deployed by Amplify Hosting (learn more).

Access this pull request here: https://pr-48414.d3pp5qlev8mo18.amplifyapp.com

@Joerger Joerger added the no-changelog Indicates that a PR does not require a changelog entry label Nov 5, 2024
@Joerger Joerger requested review from gzdunek and zmb3 November 5, 2024 00:29
@Joerger Joerger added this pull request to the merge queue Nov 6, 2024
Merged via the queue into master with commit b7c0e79 Nov 6, 2024
@Joerger Joerger deleted the joerger/fix-yubikey-connection-leak branch November 6, 2024 20:29
@public-teleport-github-review-bot
Copy link
Copy Markdown

@Joerger See the table below for backport results.

Branch Result
branch/v15 Failed
branch/v16 Failed
branch/v17 Create PR

@Joerger
Copy link
Copy Markdown
Contributor Author

Joerger commented Nov 6, 2024

Waiting on #47952 and #47953 for v16/15 backports

gzdunek pushed a commit that referenced this pull request Nov 8, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
gzdunek pushed a commit that referenced this pull request Nov 14, 2024
…n from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)
@gzdunek
Copy link
Copy Markdown
Contributor

gzdunek commented Nov 14, 2024

FYI @Joerger, I cherry-picked this PR in #47952, #47953 and #47954, so no need to backport it separately.

github-merge-queue Bot pushed a commit that referenced this pull request Nov 21, 2024
…7953)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <bjoerger@goteleport.com>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <bjoerger@goteleport.com>
github-merge-queue Bot pushed a commit that referenced this pull request Nov 21, 2024
…7952)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <bjoerger@goteleport.com>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <bjoerger@goteleport.com>
github-merge-queue Bot pushed a commit that referenced this pull request Nov 21, 2024
…7954)

* Cache PIV connections to share across the program execution (#47091)

* Cache yubikey objects.

* Cache PIV connections to share across the program execution.

* Do not release the connection until `sign` returns

* Do not ignore errors

* Perform a "warm up" call to YubiKey

* Fix tests

* Use a specific interface to check if the key can be "warmed up"

* Allow abandoning `signer.Sign` call when context is canceled

* Make sure that the cached key is valid for the given private key policy

The reason for adding this check was failing `invalid key policies` test.

* Make `hardwareKeyWarmer` private

* Force callers to release connection

* Improve comments

* Fix lint

* Improve `connect` comment

* Fix race condition

* Simplify `release` logic

* Trigger license/cla

---------

Co-authored-by: joerger <bjoerger@goteleport.com>

(cherry picked from commit bd6fdbf)

* Sign a hashed message in hardware key warmup call (#48206)

Otherwise, signing may fail with "input must be a hashed message" error.

(cherry picked from commit 47494db)

* Remove delayed closing of yubikey connection to prevent the connection from leaking after program execution. (#48414)

(cherry picked from commit b7c0e79)

---------

Co-authored-by: Brian Joerger <bjoerger@goteleport.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport/branch/v17 no-changelog Indicates that a PR does not require a changelog entry size/sm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Yubikey race condition using tsh

4 participants